package com.atguigu.service;

import com.atguigu.base.BaseService;
import com.atguigu.entity.Permission;

import java.util.List;
import java.util.Map;

/**
 * @PACKAGE_NAME: com.atguigu.service
 * @CLASSNAME: PermissionService
 * @AUTHOR: zhangsan
 * @DATE: 2024/5/1 20:59
 * @SINCE 17.0.7
 * @DESCRIPTION: PermissionService
 */
public interface PermissionService extends BaseService<Permission> {

    /**
     * 根据角色id,获取该角色拥有的权限
     * @param roleId
     * @return
     */
    List<Map<String, Object>> findPermissionByRoleId(Long roleId);

    /**
     * 给角色分配权限,其实就是将角色与权限关系保存在acl_role_permission中间表中
     * @param roleId
     * @param permissionIds
     */
    void assignPermissionsToRole(Long roleId, Long[] permissionIds);

    /**
     * 获取用户菜单权限,通过用户id获取用户角色,根据角色获取该角色分配的权限
     * @param adminId
     * @return
     */
    List<Permission> findMenuPermissionByAdminId(Long adminId);

    /**
     * 找到所有的菜单权限
     * @return
     */
    List<Permission> findAllMenuPermission();

    /**
     * 如果曾经存在,只是被删除了 is_deleted = 1,则将is_deleted改为0即可,
     * 如果曾经不存在,则进行修改
     * @param permission
     */
    Boolean updateIfEverExisted(Permission permission);

    /**
     * 如果曾经存在,只是被删除了 is_deleted = 1,则将is_deleted改为0即可,
     * 如果曾经不存在,则进行新增.
     * @param permission
     */
    Boolean insertIfEverExisted(Permission permission);

    Permission selectByTypeNameUrlCode(Permission permission);

    /**
     * 通过用户id查找用户所拥护权限的权限编码code集合
     * 注意,只有按钮type=1才有权限编码code,菜单type=2对应的是菜单url
     * @param adminId
     * @return
     */
    List<String> findCodeListByAdminId(Long adminId);
}
